#include <stdio.h>

// int main()
// {
//     int a = -7;
//     int b = a >> 1;
//     printf("%d\n",b);
//     return 0;
// }

// int main()
// {
//     int a = 3;
//     int b = -5;
//     int c = a & b;
//     //00000000000000000000000000000011  3的补码
//     //11111111111111111111111111111011  -5的补码
//     //00000000000000000000000000000011  与的结果 3
//     int d = a | b;
//     //00000000000000000000000000000011  3的补码
//     //11111111111111111111111111111011  -5的补码
//     //11111111111111111111111111111011  与的结果 -5
//     int e = a ^ b;
//     //00000000000000000000000000000011  3的补码
//     //11111111111111111111111111111011  -5的补码
//     //11111111111111111111111111111000  异或的结果 -8
//     printf("%d\n",c);
//     printf("%d\n",d);
//     printf("%d\n",e);
//     return 0;
// }

//不创建临时变量的情况下 交换两个数


// int main()
// {
//     int a = 3;
//     int b = 5;
//     printf("a = %d,b = %d\n",a,b);
//     //能实现，但存在一个问题，那就是ab都足够大时，a+b会溢出
//     a = a + b;
//     b = a - b;
//     a = a - b;
//     printf("a = %d,b = %d\n",a,b);
// }

// int main()
// {
//     int a = 3;
//     int b = 5;
//     printf("a = %d,b = %d\n",a,b);
//     a = a ^ b; //3^5
//     b = a ^ b; //3^5^5
//     a = a ^ b; //3^5^3
//     printf("a = %d,b = %d\n",a,b);
// }



// //求一个数存储在内存中2进制的1的个数
// //a&1，则只有最后一位的1会被保留
// //a右移一位，继续&1，一直持续到a右移完32位
// int main()
// {
//     int a = -3;
//     int i = 0;
//     int sum = 0;
//     for(i = 1;i <= 32;i++)
//     {
//         if((a & 1)== 1)
//         {
//             sum ++;
//         }
//         a = a >> 1; 
//     }
//     printf("%d\n",sum);
//     return 0;
// }



//结构体
#include <string.h>
struct Stu
{
    char name[20];
    int age;
    double score;
};
// void set_stu(struct Stu *ps)
// {
//     strcpy(ps -> name,"zhangsan");
//     ps -> age = 25;
//     ps -> score = 100;
// }
//注意 ps -> age 与（*ps）. age是等价的
void set_stu(struct Stu *ps)
{
    strcpy((*ps).name,"zhangsan");
    (*ps). age = 25;
    (*ps).score = 100;
}
void print_stu(struct Stu ss)
{
    printf("%s %d %lf\n",ss.name,ss.age,ss.score);
}
int main()
{
    struct Stu s = { 0 };
    set_stu(&s);
    print_stu(s);
    return 0;
}